
\section{ About }

The idea behind this program is to create a build tool that will allow
you to compile source code in an automated manner (i.e. dynamically
as the project changes) and run unit test etc. It is based on 
 \href{http://godag.googlecode.com}{godag}, which is a similar
system for Go. The idea in both cases is to create something similar
to  \href{https://maven.apache.org}{maven} or  \href{https://ant.apache.org}{ant},
but using convension instead of configuration.



\subsection{ Old fashion }

C code is compiled in a rather old fashioned manner, where 
files literally \texttt{include} other files all over the place recursively,
and the number of times the same content could be read can blow up.
As Rob Pike stated in his first talk about the Go language, this
property kills performance, so by avoiding the
recursive inspection of the source code for all imports, Go is
able to compile much faster than the typical C/C++ compilers could.



\subsection{ Very old fashion can be modern }

The way disk speed is improving with the SSD's, and the number of
processors modern computers are shipped with, I'm starting to wonder
if the out-dated C way of compiling a project is starting to become
modern again. The compiler only looks at the definitions or header
files, you really don't need to produce anything in order to satisfy
the compiler. This implies that all the compilation can
be started at the same time, there really is no waiting around 
to produce compiled code that you depend on, since you really just
assume that this will be available during linking, i.e. you just
read the header files.



\subsection{ 32 CPUs or 32 GHz }

We are heading in the direction more CPUs (or cores)
as supposed to higher frequency (instructions per second).
Combined with faster disks the old C way of doing things may 
actually be quite fast afterall, since we can compile 
everything in parallel, there is nothing to wait for.


